package rtg.api.config;
import java.io.File;
import java.util.ArrayList;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.FMLLog;
import org.apache.logging.log4j.Level;
import rtg.api.config.property.*;
public abstract class Config {
protected ArrayList<ConfigProperty> properties = new ArrayList<ConfigProperty>();
public ArrayList<ConfigProperty> getProperties() {
return this.properties;
}
protected void addProp(ConfigProperty property) {
for (int i = 0; i < this.properties.size(); i++) {
if (this.properties.get(i).name.contentEquals(property.name)) {
removeProp(property.name);
break;
}
}
this.properties.add(property);
}
protected void removeProp(String name) {
for (int i = 0; i < this.properties.size(); i++) {
if (this.properties.get(i).name.contentEquals(name)) {
this.properties.remove(i);
return;
}
}
}
public ConfigPropertyBoolean addProperty(ConfigPropertyBoolean property) {
this.addProp(property);
return property;
}
public ConfigPropertyFloat addProperty(ConfigPropertyFloat property) {
this.addProp(property);
return property;
}
public ConfigPropertyInt addProperty(ConfigPropertyInt property) {
this.addProp(property);
return property;
}
public ConfigPropertyString addProperty(ConfigPropertyString property) {
this.addProp(property);
return property;
}
public void load(String configFile) {
Configuration config = new Configuration(new File(configFile));
try {
config.load();
ArrayList<ConfigProperty> properties = this.getProperties();
for (int j = 0; j < properties.size(); j++) {
ConfigProperty prop = properties.get(j);
switch (prop.type) {
case INTEGER:
ConfigPropertyInt propInt = (ConfigPropertyInt)properties.get(j);
propInt.set(config.getInt(
propInt.name,
propInt.category,
propInt.valueInt,
propInt.minValueInt,
propInt.maxValueInt,
prop.description
));
break;
case FLOAT:
ConfigPropertyFloat propFloat = (ConfigPropertyFloat)properties.get(j);
propFloat.set(config.getFloat(
propFloat.name,
propFloat.category,
propFloat.valueFloat,
propFloat.minValueFloat,
propFloat.maxValueFloat,
propFloat.description
));
break;
case BOOLEAN:
ConfigPropertyBoolean propBool = (ConfigPropertyBoolean)properties.get(j);
propBool.set(config.getBoolean(
propBool.name,
propBool.category,
propBool.valueBoolean,
propBool.description
));
break;
case STRING:
ConfigPropertyString propString = (ConfigPropertyString)properties.get(j);
propString.set(config.getString(
propString.name,
propString.category,
propString.valueString,
propString.description
));
break;
default:
throw new RuntimeException("ConfigProperty type not supported.");
}
}
}
catch (Exception e) {
FMLLog.log(Level.ERROR, "[RTG-ERROR] RTG had a problem loading config: %s", configFile);
}
finally {
if (config.hasChanged()) {
config.save();
}
}
}
}